// JWT认证检查
const checkAuth = () => {
    console.log('dispatch-create-event.html: 开始认证检查');
    
    if (!window.AuthManager || !AuthManager.isAuthenticated()) {
        console.log('用户未认证，重定向到登录页');
        AuthManager.redirectToLogin();
        return;
    }
    
    // 检查token有效性
    AuthManager.verifyToken()
        .then(() => {
            console.log('Token验证成功，初始化页面');
            initPage();
        })
        .catch(error => {
            console.error('Token验证失败:', error);
            AuthManager.redirectToLogin();
        });
};

document.addEventListener('DOMContentLoaded', checkAuth);

function initPage() {
    var map = new AMap.Map('eventMap', {
        zoom: 13,
        center: [116.397428, 39.90923]
    });
    var marker;

    AMap.plugin(['AMap.Geocoder', 'AMap.AutoComplete', 'AMap.PlaceSearch'], function() {
        var geocoder = new AMap.Geocoder();
        var autocomplete = new AMap.AutoComplete({ input: 'location' });
        var placeSearch = new AMap.PlaceSearch({ map: map });
        console.debug('[AMap] Geocoder, AutoComplete, PlaceSearch plugins loaded');

        // 输入提示选中后地图联动
        autocomplete.on('select', function(e) {
            if (e.poi && e.poi.location) {
                var lnglat = [e.poi.location.lng, e.poi.location.lat];
                map.setCenter(lnglat);
                if (!marker) {
                    marker = new AMap.Marker({
                        position: lnglat,
                        map: map
                    });
                } else {
                    marker.setPosition(lnglat);
                }
                document.getElementById('lnglat').value = lnglat.join(',');
                document.getElementById('location').value = e.poi.name;
                console.debug('[输入提示] 选中:', e.poi.name, lnglat);
            } else if (e.poi && e.poi.name) {
                // 没有坐标时用PlaceSearch查找
                placeSearch.search(e.poi.name, function(status, result) {
                    if (status === 'complete' && result.poiList.pois.length > 0) {
                        var poi = result.poiList.pois[0];
                        var lnglat = [poi.location.lng, poi.location.lat];
                        map.setCenter(lnglat);
                        if (!marker) {
                            marker = new AMap.Marker({
                                position: lnglat,
                                map: map
                            });
                        } else {
                            marker.setPosition(lnglat);
                        }
                        document.getElementById('lnglat').value = lnglat.join(',');
                        document.getElementById('location').value = poi.name;
                        console.debug('[PlaceSearch] 搜索并选中:', poi.name, lnglat);
                    }
                });
            }
        });

        // 新增：输入后自动弹出下拉建议，失去焦点或回车时自动搜索
        var locationInput = document.getElementById('location');
        var lastAutoCompleteValue = '';
        locationInput.addEventListener('input', function() {
            // 只要输入就弹出下拉建议
            lastAutoCompleteValue = this.value;
            autocomplete.search(this.value, function(status, result) {
                // 自动弹出建议，无需处理，AMap会自动渲染下拉建议
            });
        });
        locationInput.addEventListener('change', searchAndMark);
        locationInput.addEventListener('blur', searchAndMark);
        locationInput.addEventListener('keydown', function(e) {
            if (e.key === 'Enter') {
                searchAndMark();
            }
        });
        function searchAndMark() {
            var keyword = locationInput.value.trim();
            if (!keyword || keyword === lastAutoCompleteValue) return;
            // 用PlaceSearch搜索
            placeSearch.search(keyword, function(status, result) {
                if (status === 'complete' && result.poiList.pois.length > 0) {
                    var poi = result.poiList.pois[0];
                    var lnglat = [poi.location.lng, poi.location.lat];
                    map.setCenter(lnglat);
                    if (!marker) {
                        marker = new AMap.Marker({
                            position: lnglat,
                            map: map
                        });
                    } else {
                        marker.setPosition(lnglat);
                    }
                    document.getElementById('lnglat').value = lnglat.join(',');
                    document.getElementById('location').value = poi.name;
                    console.debug('[PlaceSearch] 输入后自动搜索并选中:', poi.name, lnglat);
                }
            });
        }

        // 浏览器定位
        if (navigator.geolocation) {
            console.debug('[定位] 正在尝试获取浏览器位置..');
            navigator.geolocation.getCurrentPosition(function(position) {
                var lng = position.coords.longitude;
                var lat = position.coords.latitude;
                var lnglat = [lng, lat];
                console.debug('[定位] 成功: ', lnglat);
                map.setCenter(lnglat);

                // 标记当前位置
                if (!marker) {
                    marker = new AMap.Marker({
                        position: lnglat,
                        map: map
                    });
                } else {
                    marker.setPosition(lnglat);
                }
                document.getElementById('lnglat').value = lng + ',' + lat;

                // 逆地理编码当前位置
                geocoder.getAddress(lnglat, function(status, result) {
                    console.debug('[逆地理] 定位点逆地理结果:', status, result);
                    if (status === 'complete' && result.regeocode && result.regeocode.formattedAddress) {
                        document.getElementById('location').value = result.regeocode.formattedAddress;
                        console.debug('[逆地理] 获取到地址:', result.regeocode.formattedAddress);
                    } else {
                        document.getElementById('location').value = lng + ',' + lat;
                        console.debug('[逆地理] 逆地理失败，显示坐标:', lng + ',' + lat);
                    }
                });
            }, function(error) {
                console.debug('[定位] 失败:', error);
                // 定位失败时不做处理
            }, {enableHighAccuracy: true, timeout: 5000});
        } else {
            console.debug('[定位] 浏览器不支持地理定位');
        }

        // 地图点击选点
        map.on('click', function(e) {
            var lnglat = e.lnglat;
            console.debug('[地图] 选点:', lnglat);
            if (!marker) {
                marker = new AMap.Marker({
                    position: lnglat,
                    map: map
                });
            } else {
                marker.setPosition(lnglat);
            }
            document.getElementById('lnglat').value = lnglat.lng + ',' + lnglat.lat;
            // 逆地理编码
            geocoder.getAddress([lnglat.lng, lnglat.lat], function(status, result) {
                console.debug('[逆地理] 选点逆地理结果:', status, result);
                if (status === 'complete' && result.regeocode && result.regeocode.formattedAddress) {
                    document.getElementById('location').value = result.regeocode.formattedAddress;
                    console.debug('[逆地理] 获取到地址:', result.regeocode.formattedAddress);
                } else {
                    document.getElementById('location').value = lnglat.lng + ',' + lnglat.lat;
                    console.debug('[逆地理] 逆地理失败，显示坐标:', lnglat.lng + ',' + lnglat.lat);
                }
            });
        });
    });

    // 表单提交
    document.getElementById('callTakingForm').addEventListener('submit', function(e) {
        e.preventDefault();
        const data = {
            callerNumber: document.getElementById('callerNumber').value,
            location: document.getElementById('lnglat').value,
            description: document.getElementById('description').value,
            callNotes: document.getElementById('callNotes').value,
            title: document.getElementById('title').value,
            eventTypeId: document.getElementById('eventTypeId').value,
            priority: document.getElementById('priority').value,
            severity: document.getElementById('severity').value
        };
        console.debug('[表单] 提交数据:', data);
        
        const headers = {
            'Content-Type': 'application/json'
        };
        if (window.AuthManager && window.AuthManager.getAuthHeaders) {
            Object.assign(headers, window.AuthManager.getAuthHeaders());
        }
        
        fetch('/ercms/dispatch/api/events', {
            method: 'POST',
            headers: headers,
            body: JSON.stringify(data)
        }).then(r => r.json()).then(res => {
            const msgDiv = document.getElementById('resultMsg');
            if(res.success) {
                msgDiv.innerHTML = '<div class="alert alert-success">事件创建成功！事件ID: ' + res.data.id + '</div>';
                setTimeout(() => location.href='/ercms/dispatch/event/' + res.data.id, 1500);
            } else {
                msgDiv.innerHTML = '<div class="alert alert-danger">创建失败: ' + res.message + '</div>';
            }
        });
    });

    // 自动填充标题
    document.getElementById('callNotes').addEventListener('blur', function() {
        const notes = this.value;
        const titleInput = document.getElementById('title');
        if (notes.length > 5 && !titleInput.value) {
            titleInput.value = notes.substring(0, 30) + "...";
        }
    });
} 